﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RMS.Model
{
    public class AdministrativeEventTask
    {
        private int _taskId;
        private string _taskName;
        private string _taskDescription;
        private DateTime _startingDate;
        private DateTime _endingDate;
        private List<AdministrativeEventPerson> _persons;
        private List<LogisticalResource> _resources;

        public AdministrativeEventTask(int id, string name, DateTime startingDate, DateTime endingDate, string description = "...")
        {
            this._taskId = id;
            this._taskName = name;
            this._startingDate = startingDate;
            this._endingDate = endingDate;
            this._taskDescription = description;
            this._persons = new List<AdministrativeEventPerson>();
            this._resources = new List<LogisticalResource>();
        }

        public int Id
        {
            get { return this._taskId; }
            set { this._taskId = value;}
        }
        public string Name
        {
            get { return this._taskName; }
            set { this._taskName = value; }
        }
        public string Description
        {
            get { return this._taskDescription; }
            set { this._taskDescription = value; }
        }
        public DateTime StartDate
        {
            get { return this._startingDate; }
            set { this._startingDate = value; }
        }
        public DateTime EndDate
        {
            get { return this._endingDate; }
            set { this._endingDate = value; }
        }
        public List<AdministrativeEventPerson> Persons
        {
            get { return this._persons; }
            set { this._persons = value; }
        }
        public List<LogisticalResource> Resources
        {
            get { return this._resources; }
            set { this._resources = value; }
        }
    }

    public class AdministrativeEventActivity
    {
        private int _activityId;
        private string _activityName;
        private string _activityDescription;
        private DateTime _startingDate;
        private DateTime _endingDate;
        private List<AdministrativeEventTask> _tasks;

        public AdministrativeEventActivity(int id, string name, DateTime startingDate, DateTime endingDate, string description = "...")
        {
            this._activityId = id;
            this._activityName = name;
            this._startingDate = startingDate;
            this._endingDate = endingDate;
            this._activityDescription = description;
            this._tasks = new List<AdministrativeEventTask>();
        }

        public int Id
        {
            get { return this._activityId; }
            set { this._activityId = value;}
        }
        public string Name
        {
            get { return this._activityName; }
            set { this._activityName = value; }
        }
        public string Description
        {
            get { return this._activityDescription; }
            set { this._activityDescription = value; }
        }
        public DateTime StartDate
        {
            get { return this._startingDate; }
            set { this._startingDate = value; }
        }
        public DateTime EndDate
        {
            get { return this._endingDate; }
            set { this._endingDate = value; }
        }
        public List<AdministrativeEventTask> Tasks
        {
            get { return this._tasks; }
            set { this._tasks = value; }
        }
    }

    public class AdministrativeEventPerson
    {
        private int _personId;
        private string _personFirstName;
        private string _personLastName;
        private string _personAddress;
        private string _personPhoneNumber;

        public AdministrativeEventPerson(int id, string firstName, string lastName, string address = "P. Sherman 42, Wallaby Way", string phoneNumber = "07XX-123456")
        {
            this._personId = id;
            this._personFirstName = firstName;
            this._personLastName = lastName;
            this._personAddress = address;
            this._personPhoneNumber = phoneNumber;
        }

        public int Id
        {
            get { return this._personId; }
            set { this._personId = value; }
        }
        public string FirstName
        {
            get { return this._personFirstName; }
            set { this._personFirstName = value; }
        }
        public string LastName
        {
            get { return this._personLastName; }
            set { this._personLastName = value; }
        }
        public string Address
        {
            get { return this._personAddress; }
            set { this._personAddress = value; }
        }
        public string PhoneNumber
        {
            get { return this._personPhoneNumber; }
            set { this._personPhoneNumber = value; }
        }
    }

    public class AdministrativeEvent
    {
        private int _eventId;
        private string _eventName;
        private string _eventDescription;
        private DateTime _startingDate;
        private DateTime _endingDate;
        private List<AdministrativeEventPerson> _persons;
        private List<AdministrativeEventActivity> _activities;

        public AdministrativeEvent(int id, string name, DateTime startingDate, DateTime endingDate, string description = "...")
        {
            this._eventId = id;
            this._eventName = name;
            this._startingDate = startingDate;
            this._endingDate = endingDate;
            this._eventDescription = description;
            this._persons = new List<AdministrativeEventPerson>();
            this._activities = new List<AdministrativeEventActivity>();
        }

        public int Id
        {
            get { return this._eventId; }
            set { this._eventId = value; }
        }
        public string Name
        {
            get { return this._eventName; }
            set { this._eventName = value; }
        }
        public string Description
        {
            get { return this._eventDescription; }
            set { this._eventDescription = value; }
        }
        public DateTime StartDate
        {
            get { return this._startingDate; }
            set { this._startingDate = value; }
        }
        public DateTime EndDate
        {
            get { return this._endingDate; }
            set { this._endingDate = value; }
        }
        public List<AdministrativeEventPerson> Persons
        {
            get { return this._persons; }
            set { this._persons = value; }
        }
        public List<AdministrativeEventActivity> Activities
        {
            get { return this._activities; }
            set { this._activities = value; }
        }
    }
}
